/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cz.muni.fi.diplomka.servicelayer.gamelogic.manager;

import cz.fi.muni.diplomka.common.Coordinates;
import cz.muni.fi.diplomka.servicelayer.dto.City;
import cz.muni.fi.diplomka.servicelayer.dto.Player;
import java.util.List;

/**
 * Interface for manipulating with Cities
 *
 * @author Jakub Kutil
 */
public interface CityManager {

    /**
     * Creates City
     *
     * @param city City to create
     */
    public void createCity(City city);

    /**
     * Edits City
     *
     * @param city City to edit
     */
    public void editCity(City city);

    /**
     * Gets owner of specified City
     *
     * @param cityId Id of specified City
     * @return Player owning specified City
     */
    public Player getOwnerOfCity(Long cityId);

    /**
     * Gets all Cities owned by specified Player
     *
     * @param playerId Id of specified Player
     * @return list of Cities owned by specified Player
     */
    public List<City> getCitiesByPlayerId(Long playerId);

    /**
     * Gets all Cities
     *
     * @return list of all Cities
     */
    public List<City> getAllCities();

    /**
     * Gets Coordinates of new City
     *
     * @return Coordinates of new City
     */
    public Coordinates getEmptyCityPlace();

    /**
     * Gets City with specified name
     *
     * @param name Name of specified City
     * @return found City or empty one if not found
     */
    public City getCityByName(String name);

    /**
     * Gets City with specified id
     *
     * @param id Id of specified City
     * @return found City or empty one if not found
     */
    public City getCityById(Long id);

    /**
     * Gets City at specified Coordinates
     *
     * @param coordinates Coordinates of City
     * @return found City or empty one if not found
     */
    public City getCityAtPosition(Coordinates coordinates);
}
